#include "figuras.h"
#include <string>
#include <iostream>
#include <math.h>

using namespace std;


/********************************************************/
/********************************************************/
/*                       FIGURAS                        */
/*                                                      */

// Construtor de fig
fig::fig(){
    this->volume=0;
}
fig::fig(std::string name){
    this->name = name;
}

float fig::calculaVolume(){}

// Construtor de esfera
esfera::esfera(std::string name, float raio){
    this->name = name;
    this->raio = raio;
}

// Construtor do cubo
cubo::cubo(std::string name, float aresta){
    this->name = name;
    this->aresta = aresta;    
}

// Contrutor do cilindro
cilindro::cilindro(std::string name, float raio_base, float altura){
    this->name = name;
    this->raio_base = raio_base;
    this->altura = altura;
}

// Costrutor do tetraedro
tetraedro::tetraedro(std::string name, float lado1, float lado2, float lado3, float altura){
    this->name = name;
    this->l1 = lado1;
    this->l2 = lado2;
    this->l3 = lado3;
    this->altura = altura;
    // VERIFICA SE E TRIANGULO!!! SE NAO FOR, RETORNA ERRO!!!
    /*
     *  VERIFICAR ISSO ^
     *
     *  VERIFICAR ISSO ^
     *
     *  VERIFICAR ISSO ^
     *
     */
}


// Declaração de myName
std::string fig::myName(){
    return this->name;
}

// Declaracao de showMe
void fig::showMe(){
    cout<<this->name<<endl;
}


// Operacoes da esfera
void esfera::showMe(){
    cout<<"Esfera "<<this->name<<" de raio "<<this->raio<<" e volume "<<this->volume<<"."<<endl;
}

float esfera::calculaVolume(){
    if(this->volume==0)this->volume = PI * this->raio * this->raio * this->raio;
    return this->volume;
}


// Operacoes do cubo
void cubo::showMe(){
    cout<<"Cubo "<<this->name<<" de aresta "<<this->aresta<<" e volume "<<this->volume<<"."<<endl;
}

float cubo::calculaVolume(){
    if(this->volume==0)this->volume = this->aresta * this->aresta * this->aresta;
    return this->volume;
}


// Operacoes do cilindro
void cilindro::showMe(){
    cout<<"Cilindro "<<this->name<<" de raio da base "<<this->raio_base<<". altura "<<this->altura<<" e volume "<<this->volume<<"."<<endl;
}

float cilindro::calculaVolume(){
    if(this->volume==0)this->volume = PI * this->raio_base * this->raio_base * this->altura;
    return this->volume;
}


// Operacoes do tetraedro
void tetraedro::showMe(){
    cout<<"Tetraedro "<<this->name<<" de lados da bases "<<this->l1<<","<<this->l2<<","<<this->l3<<", altura "<<this->altura<<" e volume "<<this->volume<<"."<<endl;
}

float tetraedro::calculaVolume(){
    if(this->volume==0){
        float  semi_perimetro , area_base;

        //CALCULANDO PRIMEIRO A AREA 
        semi_perimetro = (  this->l1 + this->l2 + this->l3 ) / 2;

        // FORMULA de HERAO
        area_base = semi_perimetro *    ( semi_perimetro - this->l1 ) *
                                        ( semi_perimetro - this->l2 ) *
                                        ( semi_perimetro - this->l3 );

        area_base = sqrt( area_base );

        this->volume = area_base * altura;
    }
    return this->volume;
}

/*                     FIM FIGURAS                      */
/*                                                      */
/********************************************************/
/********************************************************/


